%
%~~
%~~  Descrição Wirth
%~~
%
\chapter{Descrição da linguagem em Wirth}
\label{04:chp:descricaowirth}
\begin{verbatim} 
LETRA = "A"|"B"|"C"|"D"|"E"|"F"|"G"|"H"|"I"
        |"J"|"L"|"M"|"N"|"O"|"P"|"Q"|"R"|"S"
        |"T"|"U"|"W"|"V"|"Y"|"X"|"Z"|"a"|"b"
        |"c"|"d"|"e"|"f"|"g"|"h"|"i"|"j"|"l"
        |"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"
        |"w"|"v"|"y"|"x"|"z".

DIGITO = "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9".

NUMERO = ["-"] {DIGITO} | [{DIGITO}] "."{DIGITO} .

IDENTIFICADOR = LETRA {LETRA | DIGITO | "_"}.

VARIAVEL = IDENTIFICADOR.

TIPO = "int" | "float" | "char" | "string".

CHAMADAFUNCAO = IDENTIFICADOR "("( {( EXPRESSAO|CADEIACHARS)","} 
                (EXPRESSAO|CADEIACHARS))")".

DECLARACAOVARIAVEL = TIPO (VARIAVEL ";"|COMANDOATRIBUICAO).

CADEIACHARS = """{QUALQUERCARACTERE}""".

CARACTERE = "’" QUALQUERCARACTERE "‘".

COMENTARIO = COMENTARIOBLOCO|COMENTARIOLINHA.

COMENTARIOBLOCO = "/*"{QUALQUERCARACTERE}"*/".

COMENTARIOLINHA = "//"{QUALQUERCARACTERE}("\n"|"EOF").

EXPRESSAO = EXPRESSAOARITMETICA | EXPRESSAOLOGICA.

EXPRESSAOARITMETICA = TERMO {("+"|"-") TERMO}.

TERMO = FATOR {("*"|"/")FATOR}.

FATOR = IDENTIFICADOR|NUMERO|(EXPRESSAOARITMETICA).

EXPRESSAOLOGICA= FATORLOGICO"&&"{FATORLOGICO}.

FATORLOGICO = LOGICOSECUNDARIO{"||"LOGICOSECUNDARIO}.

LOGICOSECUNDARIO = ["!"]LOGICOPRIMARIO.

LOGICOPRIMARIO = IDENTIFICADOR|COMPARACAO|"("EXPRESSAOLOGICA")".

COMPARACAO = EXPRESSAOARITMETICA OPERADORCOMPARACAO ESPRESSAOARITMETICA.

OPERADORCOMPARACAO = ">"|"<"|">="|"<="|"!=".

COMANDO = {COMANDOITERACAO|COMANDOCONDICAO
          |COMANDOATRIBUICAO|COMANDOLEITURA
          |COMANDOESCRITA}.

COMANDOITERACAO = "while" " (" CONDICAO ")" "{" COMANDO "}".

CONDICAO = EXPRESSAOLOGICA.

COMANDOCONDICAO = "if" "(" CONDICAO ")" 
                  "{" COMANDO "}" 
                  ["else" "{" COMANDO "}"].

COMANDOATRIBUICAO = VARIAVEL"="(EXPRESSAOARITMETICA
                               |CADEIACHARS|CHAMADAFUNCAO
                               |CARACTERE)";".

COMANDOLEITURA = "read" " (" VARIAVEL {"," VARIAVEL} ")" ";".

COMANDOESCRITA = "print" "(" (EXPRESSAOARITMETICA
                             |CADEIACHARS
                             |CARACTERE) ")" ";".
\end{verbatim}